import UIKit

/* XCode15的Swift版本5.9 */

/* Swift字符串 */
// Swift的String类型是基于Unicode建立的
var StringA = "Hello World"
print(StringA)

var StringB = String("Hello, World!")
print(StringB)

// 可以构造空字符串
var StringC = ""
let StringD = String()

// 通过字符串对象的isEmpty属性可以判断一个字符串是否为空
if StringC.isEmpty {
    print("StringC is empty!")
} else {
    print(StringC)
}

if StringD.isEmpty {
    print("StringD is empty!")
} else {
    print(StringD)
}

// 在字符串中引入变量
var str_number = 20
let str_const = 100
var str_double = 3.14

var StringE = "\(str_number) \(str_const) \(str_double)"

// 字符串之间的连接可以通过加号直接进行
var StringF = StringA + " Plus"
StringF += " Pro Max"
print(StringF)

// 字符串长度通过count属性来获得
// 中文字符只算一个字符
var StringG = "这是一个测试"
print("\(StringF.count) \(StringG.count)")

// 字符串之间是否相等可以通过==号和!=号直接进行
var StringH = "这是一个测试"
print("\(StringG == StringH) \(StringG != StringA)")

// 迭代输出字符串中的字符的UTF8和UTF16编码
for code in StringG.utf8 {
    print("\(code)")
}

for code in StringG.utf16 {
    print("\(code)")
}

// 判断是否有特定的前缀和后缀
print("\(StringG.hasPrefix("这是"))")
print("\(StringG.hasSuffix("测试"))")

// 将字符串转换为整型，注意得到的结果是一个可选型
let str_to_int = "256"
let to_int: Int? = Int(str_to_int)

// 按照字典序比较两个字符串
print("\("Hello" < "hello")")

// 遍历来访问一个字符串的Unicode标量编码
for code in StringG.unicodeScalars {
    print(code)
}

/* Swift字符 */
// Swift中表示字符仍然使用的是双引号，
// ！！！但是要加上类型为Character
// 并且双音号中只能有一个字符（包括一个中文字符）
// 并且不能是空字符
let char1: Character = "A"
let char2: Character = "好"
// 以下两句都会报错
// let char3: Character = "AB"
// let char4: Character = ""

print("\(char1) \(char2)")

// 遍历字符串中的字符
for ch in StringG {
    print(ch)
}

// 字符串连接字符不能直接用加号
// 这样会报错
// StringF += char1
StringF.append(char1)
print(StringF)
